home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / visulztn / sphinx / sphinx.lha / examples / grid.c < prev    next >
C/C++ Source or Header  |  1993-03-27  |  4KB  |  148 lines

  1. /*
  2.         Programmes externes de Sphinx : grid .
  3.  
  4.   Ce programme recoit 3 images de sphinx (une dans chaque banc). Sur
  5.   chaque image, une grille de points est tracee (epaisseur 4 pixels,
  6.   pas 64 pixels). Les images resultats sont renvoyees a Sphinx.
  7.  
  8.  
  9.  Compilation des sous programmes externes
  10.  
  11.    cc -c extlib.c extsemaphore.c
  12.    f77 -c extsubdrop.f
  13.  
  14.    sur DEC SUN et SG
  15.    cc -c UNDER_SGSUN.c
  16.  
  17.    ar r extlib.a *.o
  18.  
  19.   Pour compiler ce programme sur RS600 :
  20.     cc grid.c -o grid.out extlib.a -lxlf -lm -lg
  21.  
  22.   Pour compiler ce programme sur DecStation :
  23.     cc grid.c -o grid.out extlib.a  -lF77 -lI77 -lU77 -lfor -lUfor \
  24.         -lots  -lutil -lm -li
  25.  
  26.   Pour compiler ce programme sur HP400 :
  27.     cc grid.c -o grid.out extlib.a -lddhil -lsb1 -lsb2 -lI77 -lF77 \
  28.              -ln -lm -lc
  29.  
  30.   Pour compiler ce programme sur HP700 :
  31.     cc grid.c -o grid.out extlib.a -lm -lcl
  32.  
  33.   Pour compiler ce programme sur HP800 :
  34.     cc grid.c -o grid.out extlib.a -lddhil -lsb1 -lsb2 -lcl -lnlsstubs \
  35.              -lisamstubs -ln -lm
  36.  
  37.   Pour compiler ce programme sur Sun :
  38.     cc grid.c -o grid.out extlib.a   -lF77 -lm
  39.  
  40.   Pour compiler ce programme sur Silicon :
  41.     cc grid.c -o grid.out extlib.a  -lbsd -lfgl -lgl -lm -lF77 -lI77 \
  42.             -lU77 -lisam  -lm -lmpc
  43.  
  44.   Pour que ce programme soit connu de Sphinx, ajouter au fichier
  45.   [directory de sphinx] /files/wind_file_EXT deux lignes :
  46.     [directory de rangement du binaire ]/grid.out
  47.     Grille. (ligne de commentaire)
  48.  
  49.  
  50. */
  51. static void traiter_image();
  52.  
  53. main(argc,argv)
  54.     int argc;
  55.     char * argv [];
  56. {
  57.     char message [140];
  58.     int size, sizex, sizey, redr, greenr, bluer;
  59.     unsigned char *image_red, *image_green, *image_blue;
  60.  
  61.  
  62.     /* Lecture des parametres transmis par Sphinx (Note: sizex = sizey)*/
  63.  
  64.       sphinx_get_para (&sizex,&sizey,&redr,&greenr,&bluer,argv[1],
  65.       message,strlen(argv[1]),strlen(message));
  66.  
  67.       printf("taille de l'image en lecture: %d %d\n",sizex,sizey);
  68.       printf("plans en lecture: %d %d %d\n",redr,greenr,bluer);
  69.       printf("zone message: %s\n",message);
  70.  
  71.     /* Allocation memoire pour les images */
  72.  
  73.     size = sizex * sizey;
  74.     image_red   = (unsigned char *) malloc(size);
  75.     image_blue  = (unsigned char *) malloc(size);
  76.     image_green = (unsigned char *) malloc(size);
  77.  
  78.     /* Lecture des images transmises par Sphinx (une par plan) */
  79.  
  80.     sphinx_read(argv[1],image_red,image_green,image_blue
  81.     ,strlen(argv[1]),size,size,size);
  82.  
  83.     /* Traitement de l'image dans chaque banc */
  84.  
  85.     traiter_image(image_blue,sizex);
  86.     traiter_image(image_red,sizex);
  87.     traiter_image(image_green,sizex);
  88.  
  89.     /* Retour des images vers Sphinx */   
  90.  
  91.     sphinx_write(argv[1],image_red,image_green,image_blue
  92.     ,strlen(argv[1]),size,size,size);
  93. }
  94.  
  95. /* La fonction de traitement d'une image */
  96.  
  97. static void draw_grid();
  98.  
  99. static void traiter_image(image,size)
  100.     unsigned char * image;
  101.     int size;
  102. {
  103.     /* Tracer une grille de largeur 4 pixels par pas de 64 pixels */
  104.     int step = 64;
  105.     int width = 4;
  106.     draw_grid(image,size,step,width);
  107. }
  108.  
  109. /* Tracer une grille de largeur width pixels par pas de step pixels sur
  110.    une image situee a l'adresse image et de taille size */
  111.  
  112. static void draw_grid_line();
  113.  
  114. static void draw_grid(image,size,step,width)
  115.     unsigned char * image;
  116.     int size, step, width;
  117. {
  118.     int i, k, line;
  119.     for (i = 0; i < size; i+= step)
  120.     {
  121.     for (k = 0; k < width; k++)
  122.         {
  123.         if ((line = (i + k)) >= size) break;
  124.         draw_grid_line(image,size,step,width,line);
  125.         }
  126.     }
  127. }
  128.  
  129. static void draw_grid_line(image,size,step,width,line)
  130.     unsigned char * image;
  131.     int size, step, width, line;
  132. {
  133.     int j, k;
  134.     unsigned char * p_line, * p_pixel;
  135.     p_line = image + (line * size);
  136.     for (j = 0; j < size; j+= step)
  137.     {
  138.     p_pixel = p_line + j;
  139.     for (k = 0; k < width; k++)
  140.         {
  141.         if ((j + k) >= size) break;
  142.         *p_pixel++ = 255;
  143.         }
  144.     }
  145. }
  146.  
  147.  
  148.